import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'dart:developer' as developer;
// import 'dart:convert'; // AI处理已隐藏，不再需要base64编码
import 'dart:io';
import 'package:playtruly/common/routers/names.dart';
import 'package:playtruly/common/routers/pages.dart';
import 'package:playtruly/common/services/permission_service.dart';
// import 'package:record/record.dart'; // 录音插件已禁用
import 'package:path_provider/path_provider.dart';

import 'package:playtruly/pages/home/controller.dart';
import 'package:playtruly/pages/home/view.dart';
import 'package:playtruly/pages/message/message_detial/controller.dart';
import 'package:playtruly/pages/message/message_detial/view.dart';
import 'package:playtruly/pages/my/my_index/controller.dart';
import 'package:playtruly/pages/my/my_index/view.dart';

import 'package:playtruly/pages/play/plays/index.dart';

// AI页面相关导入已隐藏
// import 'package:playtruly/pages/playai/controller.dart';
// import 'package:playtruly/pages/playai/view.dart';

import 'state.dart';
import 'package:flutter/services.dart'; // Added for SystemChrome

class MainController extends GetxController {
  MainController();

  // 状态管理
  final state = MainState();

  // 🎤 语音录音相关状态 - 已禁用
  // final isVoiceRecording = false.obs;
  // late Record _audioRecorder;
  // String? _recordingPath;

  // 页面列表
  late final List<Widget> pages;

  // 底部导航项
  late final List<BottomNavigationBarItem> items;

  // 路由映射表
  final List<String> _routes = [
    RouteNames.home,
    RouteNames.playPlays,
    RouteNames.messageMessageDetial,
    RouteNames.myMyIndex,
    // RouteNames.playai, // AI页面路由已隐藏
  ];

  // 初始化数据
  @override
  void onInit() {
    super.onInit();

    developer.log('🚀 =============== MainController开始初始化 ===============', name: 'Main');
    
    // 🎤 初始化录音器 - 已禁用
    // _audioRecorder = Record();
    
    // 🔥 立即注册所有子控制器，确保在任何服务调用前就存在
    _initControllers();

    // 初始化页面
    pages = [
      const HomePage(),
      const PlaysPage(),
      const MessageDetialPage(),
      const MyIndexPage(),
      // const PlayaiPage(), // AI页面已隐藏
    ];

    // 初始化底部导航项
    items = const [
      BottomNavigationBarItem(icon: Icon(Icons.home), label: '首页'),
      BottomNavigationBarItem(icon: Icon(Icons.explore), label: '一起玩'),
      BottomNavigationBarItem(icon: Icon(Icons.message), label: '消息'),
      BottomNavigationBarItem(icon: Icon(Icons.person), label: '我的'),
    ];

    // 记录初始路由
    _recordTabRoute(state.selectedIndex.value);

    // 输出日志验证初始化
    debugPrint('MainController初始化完成: ${state.selectedIndex.value}');
    
    // 🎯 应用启动时按顺序申请所有权限（系统级权限申请）
    _requestEssentialPermissionsInOrder();

    // 重置系统UI样式，确保状态栏显示正确
    _resetSystemUIStyle();
    
    developer.log('🏁 =============== MainController初始化完成 ===============', name: 'Main');
  }

  // 重置系统UI样式
  void _resetSystemUIStyle() {
    SystemChrome.setSystemUIOverlayStyle(
      SystemUiOverlayStyle(
        statusBarColor: Colors.white, // 与my_index页面一致
        statusBarIconBrightness: Brightness.dark, // 与my_index页面一致
        systemNavigationBarColor: Colors.white, // 底部导航栏背景色
        systemNavigationBarIconBrightness: Brightness.dark, // 底部导航栏图标为暗色
      ),
    );
  }

  // 确保所有子控制器已经初始化（使用permanent确保不被垃圾回收）
  void _initControllers() {
    // 显式初始化所有子控制器，确保它们在使用前已存在
    // 🔥 使用permanent: true确保Controller不会被垃圾回收
    Get.put(HomeController(), permanent: true);
    Get.put(PlaysController(), permanent: true);
    Get.put(MessageDetialController(), permanent: true);
    Get.put(MyIndexController(), permanent: true);
    // Get.put(PlayaiController(), permanent: true); // AI控制器已隐藏
    
    developer.log('🎯 =============== 主页面Controller注册完成 ===============', name: 'Main');
    developer.log('✅ HomeController注册状态: ${Get.isRegistered<HomeController>()}', name: 'Main');
    developer.log('✅ PlaysController注册状态: ${Get.isRegistered<PlaysController>()}', name: 'Main');
    developer.log('✅ MessageDetialController注册状态: ${Get.isRegistered<MessageDetialController>()}', name: 'Main');
    developer.log('✅ MyIndexController注册状态: ${Get.isRegistered<MyIndexController>()}', name: 'Main');
    // developer.log('✅ PlayaiController注册状态: ${Get.isRegistered<PlayaiController>()}', name: 'Main');
  }

  // 记录标签页路由
  void _recordTabRoute(int index) {
    if (index >= 0 && index < _routes.length) {
      // 记录虚拟路由，不实际导航
      RoutePages.addHistory(_routes[index]);
    }
  }

  // 切换页面
  void switchTab(int index) {
    debugPrint('切换到标签: $index');
    state.selectedIndex.value = index;

    // 记录路由历史
    _recordTabRoute(index);

    // 根据不同的页面设置相应的状态栏样式
    if (index == 1) { // 一起玩页面
      // 设置一起玩页面的状态栏样式 - 使用暗色图标（黑色）
      SystemChrome.setSystemUIOverlayStyle(
        const SystemUiOverlayStyle(
          statusBarColor: Colors.transparent,
          statusBarIconBrightness: Brightness.dark, // 暗色图标（黑色）
          statusBarBrightness: Brightness.light, // iOS的状态栏样式
        ),
      );
    } else {
      // 其他页面使用默认样式
      _resetSystemUIStyle();
    }

    update(); // 显式调用update以确保更新
  }

  // 请求麦克风权限
  Future<void> requestMicrophonePermission() async {
    // 获取权限服务
    final permissionService = Get.find<PermissionService>();

    // 请求麦克风权限
    await permissionService.requestMicrophonePermission();
  }

  // 请求位置权限
  Future<void> requestLocationPermission() async {
    // 获取权限服务
    final permissionService = Get.find<PermissionService>();

    // 请求位置权限
    await permissionService.requestLocationPermission();
  }

  // 检查并请求所有权限（先请求麦克风权限，然后请求位置权限）
  Future<void> checkAllPermissions() async {
    // 先请求麦克风权限
    await requestMicrophonePermission();

    // 然后请求位置权限
    await requestLocationPermission();
  }

  @override
  void onReady() {
    super.onReady();
    debugPrint('MainController准备完成');

    // 延迟1秒后请求所有权限
    // Future.delayed(const Duration(seconds: 1), () {
    //   checkAllPermissions(); // 修改为请求所有权限
    // });
  }

  // 🚀 应用启动时按顺序申请所有必要权限（系统级权限申请）
  Future<void> _requestEssentialPermissionsInOrder() async {
    try {
      developer.log('🚀 =============== Main页面启动权限申请流程 ===============', name: 'Main');
      
      // 延迟2秒，确保app完全加载并且用户看到主界面后再申请权限
      developer.log('⏰ 延迟2秒后开始权限申请，确保app完全加载...', name: 'Main');
      await Future.delayed(const Duration(milliseconds: 2000));
      
      developer.log('🔧 获取权限服务依赖...', name: 'Main');
      final permissionService = Get.find<PermissionService>();
      developer.log('✅ 权限服务获取成功', name: 'Main');
      
      // 🎯 按顺序申请所有必要权限（系统级申请，一个接一个）
      developer.log('🎯 开始按顺序申请权限（系统级申请）...', name: 'Main');
      
      try {
        // 🔄 强制重新申请通知权限，确保用户看到系统级授权对话框
        final grantedPermissions = await permissionService.requestEssentialPermissionsInOrder(
          forceNotificationRequest: true, // 强制重新申请通知权限
        );
        developer.log('🎉 权限申请流程完成！已授予的权限: $grantedPermissions', name: 'Main');
        
        // 权限申请完成，无需发送测试通知
        developer.log('✅ 权限申请流程完成，所有必要权限已处理', name: 'Main');
        
      } catch (e) {
        developer.log('💥 权限申请流程异常: $e', name: 'Main');
        developer.log('💥 异常类型: ${e.runtimeType}', name: 'Main');
      }
      
    } catch (e) {
      developer.log('💥 Main页面权限申请流程异常: $e', name: 'Main');
      developer.log('💥 异常类型: ${e.runtimeType}', name: 'Main');
    } finally {
      developer.log('🏁 =============== Main页面权限申请流程结束 ===============', name: 'Main');
    }
  }

  // 🎤 开始语音录音 - 已禁用
  // Future<void> startVoiceRecording() async {
  //   try {
  //     developer.log('🎤 开始语音录音...', name: 'Main');
  //     
  //     // 检查录音权限
  //     if (!await _checkRecordPermission()) {
  //       developer.log('❌ 录音权限未授予', name: 'Main');
  //       return;
  //     }
  //     
  //     // 创建录音文件路径
  //     final directory = await getTemporaryDirectory();
  //     final timestamp = DateTime.now().millisecondsSinceEpoch;
  //     _recordingPath = '${directory.path}/voice_$timestamp.m4a';
  //     
  //     // 开始录音
  //     await _audioRecorder.start(
  //       path: _recordingPath!,
  //       encoder: AudioEncoder.aacLc, // AAC格式，兼容性好
  //       bitRate: 128000,
  //       samplingRate: 44100,
  //     );
  //     
  //     isVoiceRecording.value = true;
  //     developer.log('✅ 录音开始，文件路径: $_recordingPath', name: 'Main');
  //     
  //     // 🎤 通知AI页面开始录音（AI页面已隐藏）
  //     // if (state.selectedIndex.value == 4) {
  //     //   try {
  //     //     final playaiController = Get.find<PlayaiController>();
  //     //     playaiController.startVoiceRecording();
  //     //   } catch (e) {
  //     //     developer.log('⚠️ 通知AI页面开始录音失败: $e', name: 'Main');
  //     //   }
  //     // }
  //     
  //   } catch (e) {
  //     developer.log('❌ 开始录音失败: $e', name: 'Main');
  //     isVoiceRecording.value = false;
  //   }
  // }
  
  // 🎤 停止语音录音 - 已禁用
  // Future<void> stopVoiceRecording() async {
  //   try {
  //     if (!isVoiceRecording.value) return;
  //     
  //     developer.log('🛑 停止语音录音...', name: 'Main');
  //     
  //     // 🎤 通知AI页面停止录音（AI页面已隐藏）
  //     // if (state.selectedIndex.value == 4) {
  //     //   try {
  //     //     final playaiController = Get.find<PlayaiController>();
  //     //     playaiController.stopVoiceRecording();
  //     //   } catch (e) {
  //     //     developer.log('⚠️ 通知AI页面停止录音失败: $e', name: 'Main');
  //     //   }
  //     // }
  //     
  //     // 停止录音
  //     await _audioRecorder.stop();
  //     isVoiceRecording.value = false;
  //     
  //     // 处理录音文件
  //     if (_recordingPath != null) {
  //       await _processRecordedAudio(_recordingPath!);
  //     }
  //     
  //   } catch (e) {
  //     developer.log('❌ 停止录音失败: $e', name: 'Main');
  //     isVoiceRecording.value = false;
  //     
  //     // 出错时也要通知AI页面结束（AI页面已隐藏）
  //     // if (state.selectedIndex.value == 4) {
  //     //   try {
  //     //     final playaiController = Get.find<PlayaiController>();
  //     //     playaiController.finishVoiceProcessing();
  //     //   } catch (e) {
  //     //     developer.log('⚠️ 通知AI页面结束处理失败: $e', name: 'Main');
  //     //   }
  //     // }
  //   }
  // }

  // 🔧 强制重置所有语音状态（修复页面跳动问题）- 已禁用
  // void forceResetAllVoiceStates() {
  //   developer.log('🔧 [紧急重置] 强制重置所有语音相关状态', name: 'Main');
  //   
  //   try {
  //     // 重置MainController状态
  //     isVoiceRecording.value = false;
  //     
  //     // 停止录音器（如果正在录音）
  //     _audioRecorder.stop().catchError((e) {
  //       developer.log('⚠️ [紧急重置] 停止录音器失败: $e', name: 'Main');
  //       return "";
  //     });
  //     
  //     // 重置AI页面状态（AI页面已隐藏）
  //     // if (state.selectedIndex.value == 4) {
  //     //   try {
  //     //     final playaiController = Get.find<PlayaiController>();
  //     //     playaiController.forceResetVoiceState();
  //     //   } catch (e) {
  //     //     developer.log('⚠️ [紧急重置] 重置AI页面状态失败: $e', name: 'Main');
  //     //   }
  //     // }
  //     
  //     developer.log('✅ [紧急重置] 所有语音状态重置完成', name: 'Main');
  //   } catch (e) {
  //     developer.log('❌ [紧急重置] 重置过程中发生错误: $e', name: 'Main');
  //   }
  // }
  
  // 🎤 检查录音权限 - 已禁用
  // Future<bool> _checkRecordPermission() async {
  //   // 使用record插件内置的权限检查方法
  //   return await _audioRecorder.hasPermission();
  // }
  
  // 🎤 处理录音文件 - 已禁用
  // Future<void> _processRecordedAudio(String audioPath) async {
  //   try {
  //     developer.log('🔄 处理录音文件: $audioPath', name: 'Main');
  //     
  //     // 读取音频文件
  //     final file = File(audioPath);
  //     if (!await file.exists()) {
  //       developer.log('❌ 录音文件不存在', name: 'Main');
  //       return;
  //     }
  //     
  //     final audioBytes = await file.readAsBytes();
  //     if (audioBytes.isEmpty) {
  //       developer.log('❌ 录音文件为空', name: 'Main');
  //       return;
  //     }
  //     
  //     // 转换为Base64（AI处理已隐藏）
  //     // final base64Audio = base64Encode(audioBytes);
  //     // final audioData = 'data:audio/m4a;base64,$base64Audio';
  //     
  //     developer.log('✅ 音频转换完成，长度: ${audioBytes.length} bytes', name: 'Main');
  //     
  //     // 切换到AI页面并传递音频数据（AI页面已隐藏）
  //     // switchTab(4);
  //     
  //     // 延迟一段时间确保AI页面完全加载
  //     // await Future.delayed(const Duration(milliseconds: 500));
  //     
  //     // 获取AI控制器并传递音频数据
  //     // final playaiController = Get.find<PlayaiController>();
  //     // await playaiController.processAudioFromFlutter(audioData);
  //     
  //     // 清理临时文件
  //     await file.delete();
  //     developer.log('🗑️ 临时录音文件已删除', name: 'Main');
  //     
  //   } catch (e) {
  //     developer.log('❌ 处理录音文件失败: $e', name: 'Main');
  //   }
  // }

  @override
  void onClose() {
    // 释放录音器资源（record 4.4.4 版本可能不需要dispose）- 已禁用
    // _audioRecorder.dispose();
    super.onClose();
  }
}
